package com.exercise.module.common.file.service;/**
 * Created by kete on 2017-05-11.
 */


/**
 * 文件存储service
 * 相对目录,从全局变量取,如果文件不存在,取系统用户目录
 *   如:C:/Users/Administrator/.ebidding/uploadDir
 * 临时文件目录相对目录,从全局变量取,如果文件不存在,取系统用户目录
 *   如:C:/Users/Administrator/.ebidding/temp
 *
 * 文件存储目录
 *   相对目录/代理机构编号/日期/一级模块/二级模块/GUID.扩展名
 *   /uploadDir/yzb/20140627/bkb/bkb_opening_detail/a460fdcd-de36-490e-92be-0a51b9591ac7.xls
 * 数据库保存的目录
 *   /yzb/20140627/bkb/bkb_opening_detail/a460fdcd-de36-490e-92be-0a51b9591ac7.xls *
 *
 * 临时文件目录
 *   临时文件目录相对目录/代理机构编号/日期/一级模块/二级模块/GUID
 *   temp/yzb/20140627/bkb/opening_record/a460fdcd-de36-490e-92be-0a51b9591ac

 *
 */

import com.exercise.module.common.dao.entity.EbsFile;
import com.exercise.module.common.dao.entity.SysDocFile;
import org.springframework.web.multipart.MultipartFile;

import java.io.File;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.List;

/**
 * 作者：kete
 * 创建时间：2017-05-11 16:17
 * 功能描述：
 * 版本：
 */
public interface FileService {

    /**
     * <p>上传文件到服务器.</p>
     * <pre>
     *
     * @Autowired
     * @Qualifier("ossFileService")
     * private FileService fileService;
     *
     * fileService.putFile("d:/file/test.xls","bkb","bkb_opening_detail");
     * fileService.putFile("/java/file/test.xls","bkb","bkb_opening_detail");
     * </pre>
     * <p>存储路径为 /bkb/bkb_opening_detail/a460fdcd-de36-490e-92be-0a51b9591ac7.xls</p>
     * @param local 本地文件名.
     * @param module1 模块1.
     * @param module2 模块2,代表表名.
     * @return 上传后的文件id.
     */
    public String putFile(String local, String module1, String module2);

    /**
     *
     * <p>上传文件到服务器.</p>
     * <pre>
     *
     * @Autowired
     * @Qualifier("ossFileService")
     * private FileService fileService;
     *
     * fileService.putFile(new File("d:/file/test.xls"),"bkb","bkb_opening_detail");
     * fileService.putFile(new File("/java/file/test.xls"),"bkb","bkb_opening_detail");
     * </pre>
     * <p>存储路径为 /bkb/bkb_opening_detail/a460fdcd-de36-490e-92be-0a51b9591ac7.xls</p>
     * @param local 本地文件名.
     * @param module1 模块1.
     * @param module2 模块2,代表表名.
     * @return 上传后的文件id.
     */
    public String putFile(File local, String module1, String module2);

    /**
     *
     * <p>上传文件到服务器.</p>
     * <pre>
     *
     * @Autowired
     * @Qualifier("ossFileService")
     * private FileService fileService;
     *
     * MultipartFile local = object;
     * fileService.putFile(local,"bkb","bkb_opening_detail");
     * </pre>
     * <p>存储路径为 /bkb/bkb_opening_detail/a460fdcd-de36-490e-92be-0a51b9591ac7.xls</p>
     * @param local 本地文件名.
     * @param module1 模块1.
     * @param module2 模块2,代表表名.
     * @return 上传后的文件id.
     */
    public String putFile(MultipartFile local, String module1, String module2);

    /**
     * <p>上传文件到服务器,并重新命名.</p>
     * <pre>
     *
     * @Autowired
     * @Qualifier("ossFileService")
     * private FileService fileService;
     *
     * fileService.putFile("d:/file/test.xls","bkb","bkb_opening_detail","开标记录表.xls");
     * fileService.putFile("/java/file/test.xls","bkb","bkb_opening_detail","开标记录表.xls");
     * </pre>
     * <p>存储路径为 /bkb/bkb_opening_detail/a460fdcd-de36-490e-92be-0a51b9591ac7.xls</p>
     * @param local 本地文件名.
     * @param module1 模块1.
     * @param module2 模块2,代表表名.
     * @param rename 新名字.
     * @return 上传后的文件id.
     */
    public String putFile(String local, String module1, String module2, String rename);

    /**
     *
     * <p>上传文件到服务器,并重新命名.</p>
     * <pre>
     *
     * @Autowired
     * @Qualifier("ossFileService")
     * private FileService fileService;
     *
     * fileService.putFile(new File("d:/file/test.xls"),"bkb","bkb_opening_detail,"开标记录表.xls");
     * fileService.putFile(new File("/java/file/test.xls"),"bkb","bkb_opening_detail,"开标记录表.xls");
     * </pre>
     * <p>存储路径为 /bkb/bkb_opening_detail/a460fdcd-de36-490e-92be-0a51b9591ac7.xls </p>
     * @param local 本地文件名.
     * @param module1 模块1.
     * @param module2 模块2,代表表名.
     * @param rename 新名字.
     * @return 上传后的文件id.
     */
    public String putFile(File local, String module1, String module2, String rename);

    /**
     *
     * <p>上传文件到服务器,并重新命名.</p>
     * <pre>
     *
     * @Autowired
     * @Qualifier("ossFileService")
     * private FileService fileService;
     *
     * FileInputStream local = new FileInputStream("d:/file/test.xls");
     * fileService.putFile(local,"bkb","bkb_opening_detail,"开标记录表.xls");
     * </pre>
     * <p>存储路径为 /bkb/bkb_opening_detail/a460fdcd-de36-490e-92be-0a51b9591ac7.xls </p>
     * @param local 本地文件名.
     * @param module1 模块1.
     * @param module2 模块2,代表表名.
     * @param rename 新名字.
     * @return 上传后的文件id.
     */
    public String putFile(InputStream local, String module1, String module2, String rename);

    /**
     *
     * <p>上传文件到服务器,并重新命名.</p>
     * <pre>
     *
     * @Autowired
     * @Qualifier("ossFileService")
     * private FileService fileService;
     *
     * MultipartFile local = object;
     * fileService.putFile(local,"bkb","bkb_opening_detail,"开标记录表.xls");
     * </pre>
     * <p>存储路径为 /bkb/bkb_opening_detail/a460fdcd-de36-490e-92be-0a51b9591ac7.xls</p>
     * @param local 本地文件名.
     * @param module1 模块1.
     * @param module2 模块2,代表表名.
     * @param rename 新名字.
     * @return 上传后的文件id.
     */
    public String putFile(MultipartFile local, String module1, String module2, String rename);

    /**
     * <p>获取文件,如果本地不存在,从服务器上下载.</p>
     * <pre>
     * @Autowired
     * @Qualifier("ossFileService")
     * private FileService fileService;
     *
     * fileService.getFileById("ff620957-ad0c-42e3-8d51-3358b44f0afe");
     *
     * </pre>
     * <p>返回的信息有,文件名,文件路径,文件大小,文件,文件流.</p>
     *
     * @param fileId 文件id.
     * @return 文件信息.
     */
    public EbsFile getFileById(String fileId);

    public EbsFile getFileById(String fileId, String accessCode);



    /**
     * <p>获取文件,复制到输出流.</p>
     * <pre>
     * @Autowired
     * @Qualifier("ossFileService")
     * private FileService fileService;
     *
     * FileOutputStream out = new FileOutputStream("d:/file/test.xls");
     * EbsFile ebsFile = fileService.copyFileById("ff620957-ad0c-42e3-8d51-3358b44f0afe",out);
     *
     * </pre>
     * <p>返回的信息有,文件名,文件路径,文件大小</p>
     *
     * @param fileId 文件id.
     * @param out 输出流.
     * @return 文件信息.
     */
    public EbsFile copyFileById(String fileId, OutputStream out);

    /**
     * <p>获取文件,如果本地不存在,从服务器上下载.</p>
     * <pre>
     * @Autowired
     * @Qualifier("ossFileService")
     * private FileService fileService;
     *
     * EbsFile ebsFile = fileService.getFileByPath("/yzb/20140701/bkb/bkb_opening_detail/ff620957-ad0c-42e3-8d51-3358b44f0afe.xls",out);
     *
     * </pre>
     * <p>返回的信息有,文件名,文件路径,文件大小,文件,文件流.</p>
     *
     * @param filePath 文件路径.
     * @return 文件信息.
     */
    public EbsFile getFileByPath(String filePath);

    /**
     * <p>获取文件,复制到输出流.</p>
     * <pre>
     * @Autowired
     * @Qualifier("ossFileService")
     * private FileService fileService;
     *
     * FileOutputStream out = new FileOutputStream("d:/file/test.xls");
     * EbsFile ebsFile = fileService.getFileByPath("/yzb/20140701/bkb/bkb_opening_detail/ff620957-ad0c-42e3-8d51-3358b44f0afe.xls",out);
     *
     * </pre>
     * <p>返回的信息有,文件名,文件路径,文件大小</p>
     *
     * @param fileId 文件id.
     * @param out 输出流.
     * @return 文件信息.
     */
    public EbsFile copyFileByPath(String filePath, OutputStream out);

    /**
     * 获取文件名,通过文件id.
     *
     * @param fileId 文件id.
     * @return 文件名.
     */
    public String getFileNameById(String fileId);

    /**
     * 获取文件名,通过文件路径.
     *
     * @param filePath 文件路径.
     * @return 文件名.
     */
    public String getFileNameByPath(String filePath);

    /**
     * 获取文件信息,通过文件id.
     *
     * @param fileId 文件id.
     * @return 文件信息.
     */
    public SysDocFile getSysDocFileById(String fileId);
    public List<SysDocFile> getSysDocFileByIds(String[] ids);

    /**
     * 获取文件信息,通过文件路径.
     *
     * @param filePath 文件路径.
     * @return 文件信息.
     */
    public SysDocFile getSysDocFileByPath(String filePath);

}
